/**
  ******************************************************************************
  * @file    ShakeSwitchControl.c
  * @author  Dynapack ADT, Hsinmo
  * @version V1.0.0
  * @date    04-March-2014
  * @brief   Back Light Control setting
  ******************************************************************************
  * @attention
  *
  * DESCRIPTION....
  *
  * <h2><center>&copy; COPYRIGHT 2012 Dynapack</center></h2>
  ******************************************************************************
  */

//==============================================================================
// Includes
//==============================================================================
#include "Config_Info\System_Config_Info.h"
#include "Drivers.h"

#if (_Use_Shake_Switch_By_Interrupt_ToWakeUp_ == 1)
//==============================================================================
// Global/Extern variables
//==============================================================================
//==============================================================================
// Extern functions
//==============================================================================
//==============================================================================
// Private typedef
//==============================================================================
//==============================================================================
// Private define
//==============================================================================
#define Shake_Switch_PORT   GPIOC
#define Shake_Switch_PIN    GPIO_Pin_5
#define Shake_Switch_EXTI   EXTI_Pin_5

//==============================================================================
// Private macro
//==============================================================================
//==============================================================================
// Private Enum
//==============================================================================
//==============================================================================
// Private variables
//==============================================================================
//==============================================================================
// Private function prototypes
//==============================================================================
void (*Intupt_Shake_Switch_ptr_fuc)(void);
void empty_Shake_Switch_Event_Trigger_fun(){}

//==============================================================================
// Private functions
//==============================================================================
/**
  * @brief  Configure Optput Signal Control GPIO peripheral
  * @param  None
  * @retval None
  */
void _Device_ShakeSwitchControl_Init(void){


   /* Pin configured in input floating mode with interrupt enabled
                       --> connected to EXTIx Interrupt, where x:0..7 */
    GPIO_Init(Shake_Switch_PORT, Shake_Switch_PIN, GPIO_Mode_In_FL_IT);  /*!< Input floating, external interrupt */
	/* Initialize the Interrupt sensitivity */
    //EXTI_SetPinSensitivity(Shake_Switch_EXTI, EXTI_Trigger_Falling);  /*!< Interrupt on Falling edge only */
	/* Initialize the Interrupt sensitivity */
    EXTI_SetPinSensitivity(Shake_Switch_EXTI, EXTI_Trigger_Rising);  /*!< Interrupt on Rising edge only */

    Intupt_Shake_Switch_ptr_fuc = empty_Shake_Switch_Event_Trigger_fun;

}

void _Device_Set_Shake_Switch_Interrupt_Enable(unsigned char enable){
    if(enable){
        GPIO_Init(Shake_Switch_PORT, Shake_Switch_PIN, GPIO_Mode_In_FL_IT);  /*!< Input floating, external interrupt */
    }else{
        GPIO_Init(Shake_Switch_PORT, Shake_Switch_PIN, GPIO_Mode_In_FL_No_IT);  /*!< Input floating, No external interrupt */
    }
}

void _Device_Set_Interrupt_Shake_Switch_Events_Trigger_Function(void (*calling_fun)()){
    Intupt_Shake_Switch_ptr_fuc = calling_fun;
}
void _Device_Remove_Interrupt_Shake_Switch_Events_Trigger_Function(){
    Intupt_Shake_Switch_ptr_fuc = empty_Shake_Switch_Event_Trigger_fun;
}



/********************************************************************************
* EXTI5_IRQHandler										*
*******************************************************************************/
/**
  * @brief External IT PIN5 Interrupt routine.
  * @par Parameters:
  * None
  * @retval
  * None
  */
#if defined(_IAR_)	
INTERRUPT_HANDLER(EXTI5_IRQHandler, 13)
{
#endif
#if defined(_COSMIC_)	
INTERRUPT void EXTI5_IRQHandler(void)
{
#endif

    GPIO_TOGGLE(LED1_PORT, LED1_PIN);
    //GPIO_HIGH(LED1_PORT, LED1_PIN);
    //GPIO_LOW(LED1_PORT, LED1_PIN);

    _Device_delay_cycles(10);     //100 = 1ms at CCLK=4MHz, 15 ~= 150 us
    (*Intupt_Shake_Switch_ptr_fuc)();

    /* Cleat Interrupt pending bit */
    EXTI_ClearITPendingBit(EXTI_IT_Pin5);
}

#endif